// 导入模块
const express = require('express')
const cors = require('cors')
const app = express()
const router = require('./router/index')

// 挂载资源
app.use(express.static(__dirname))
// 导入配置项
const config = require('./config')
// 导入解析token的模块
const expressJWT = require('express-jwt')
// 导入解析req.body的模块
app.use(express.json())
app.use(express.urlencoded({ extended: false }))

const corsOptions = {
    origin: function (origin, callback) {
        // 允许的域名列表
        const allowedOrigins = [
            'http://localhost:3000',
            'http://localhost:8080',
            'http://127.0.0.1:3000',
            'http://127.0.0.1:8080'
        ];
        // 允许没有 origin 的请求（比如移动端 APP）
        if (!origin || allowedOrigins.indexOf(origin) !== -1) {
            callback(null, true);
        } else {
            callback(new Error('Not allowed by CORS'));
        }
    },
    methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
    credentials: true, // 允许携带凭证
    maxAge: 86400 // 预检请求结果缓存时间，单位：秒
};

app.use(cors(corsOptions));

// 解析token的中间件
// 注意：只要配置成功了 express-jwt 这个中间件，就可以把解析出来的用户信息，挂载到 req.user 属性上
// 设置以api开头的接口不需要访问权限
app.use(
    expressJWT.expressjwt({ secret: config.jwtSelectKey, algorithms: ["HS256"] }).unless({
        path: [/^\/api\//],
    })
)
//  使用路由
app.use('/api', router)


// 错误中间件(放路由后面)
app.use(function (err, req, res, next) {
    if (err.name === 'UnauthorizedError') {
        return res.send('身份验证失败')
    }
    res.send(err)
})

app.listen(80, () => {
    console.log('running at 127.0.0.1')

})